package com.young.core.manager;

import com.young.core.domain.NodeDO;
import org.springframework.transaction.annotation.Transactional;

import java.util.Collection;
import java.util.List;
import java.util.concurrent.ExecutionException;

public interface NodeManager {

    /**
     * 服务节点upsert,存在：更新；不存在: 插入
     *
     * @return
     */
    @Transactional
    void upsert(NodeDO node);

    @Transactional
    int delete(NodeDO node);

    /**
     * 删除过期的节点，即在ttl时间内没有跟新活性的
     */
    @Transactional
    int expire(long ttl);

    /**
     * 服务节点查询
     *
     * @param project
     * @return
     */
    Collection<NodeDO> getAll(String project);

    List<NodeDO> getAliveCache(String project, int ttl) throws ExecutionException;

    Collection<NodeDO> getAlive(String project, int ttl);

}
